/****
 * 
 * 5．题目一写一个方法输入给定数组 按照性别拆出两个列表，并分别按年龄排序
6．正确定义题目一函数的参数和返回值的类型
7．正确定义数组的类型
8．正确定义对象的类型
 * 
 * 
 * 
 * 
 ****/
// 输入：
// interface ListItem {
//   name: string;
//   message: MessageItem;
// }

// interface MessageItem {
//   age: number;
//   gender: string;
//   height: number;
// }

// interface Result {
//   man: ListItem[];
//   girl: ListItem[];
// }

// var list = [
//   {
//     name: "a",
//     message: {
//       age: 20,
//       gender: "男",
//       height: 1.78,
//     },
//   },
//   {
//     name: "b",
//     message: {
//       age: 22,
//       gender: "女",
//       height: 1.7,
//     },
//   },
//   {
//     name: "c",
//     message: {
//       age: 18,
//       gender: "男",
//       height: 1.83,
//     },
//   },
//   {
//     name: "e",
//     message: {
//       age: 27,
//       gender: "男",
//       height: 1.75,
//     },
//   },
//   {
//     name: "d",
//     message: {
//       age: 19,
//       gender: "女",
//       height: 1.73,
//     },
//   },
// ];

// function test1(arr: ListItem[]): Result {
//   const man: ListItem[] = [];
//   const girl: ListItem[] = [];

//   arr.forEach((v) => {
//     if (v.message.gender === "男") {
//       man.push(v);
//     } else if (v.message.gender === "女") {
//       girl.push(v);
//     }
//   });

//   man.sort((a, b) => {
//     return a.message.age - b.message.age;
//   });

//   girl.sort((a, b) => {
//     return a.message.age - b.message.age;
//   });

//   return {
//     girl,
//     man
//   }
// }

// const s = test1(list);
// console.log(s);

// 写一个方法输入以上数组 按照性别拆出两个列表，并分别按年龄排序 输出：
// let man = [
//     {
//         name:'c',
//         message:{
//             age:18,
//             gender:'男',
//             height:1.83
//         }
//     },
//     {
//         name:'a',
//         message:{
//             age:20,
//             gender:'男',
//             height:1.78
//         }
//     },
//     {
//         name:'e',
//         message:{
//             age:27,
//             gender:'男',
//             height:1.75
//         }
//     }
// ]
// let girl = [
//     {
//         name:'d',
//         message:{
//             age:19,
//             gender:'女',
//             height:1.73
//         }
//     },
//     {
//         name:'b',
//         message:{
//             age:22,
//             gender:'女',
//             height:1.70
//         }
//     }
// ]

// 9．正确定义题目二的函数的参数类型和返回数据类型
// 10．题目二写一个方法输入给定数组 进行数据转换并排序（每个对象中的key不是固定的）
// 11．正确定义题目二的数组类型
// 12．正确定义题目二的对象类型
// 13．正确实现题目二的功能

//   输入：
let arr1 = [
  { name: "name1" },
  { a: "a1", b: "b1" },
  { a: "a2", b: "b2" },
  { a: "a3" },
  { a: "a4", d: "d1", c: "c1" },
];

// 写一个方法输入以上数组 进行数据转换并排序（每个对象中的key不是固定的）输出：
// let obj = {a:["a1","a2","a3","a4"],b:["b1","b2"],c:["c1"],name:["name1"]}

interface ItemState {
  // 任意对象
  name?: string;
  a?: string;
  b?: string;
  c?: string;
  d?: string;
}

interface ObjState {
  // 任意键名
  [propsName: string]: string[];
}

function test2(list: any[]) {
  const obj: ObjState = {};
  //   循环数组
  list.forEach((v) => {
    // 获取每一个对象的键名  并且放到一个数组中
    const result = Object.keys(v);
    // 循环键名数组
    result.forEach((key) => {
      // 是否存在该项
      if (obj[key]) {
        // 直接推入数组
        obj[key].push(v[key]);
      } else {
        // 复制新数组 并放入第一项
        obj[key] = [v[key]];
      }
    });
  });
  return obj;
}

const sss = test2(arr1);
console.log(sss);

// 输入：
// let x = -123;
// let y = 120;
// let n = 212;

// 将整数翻转并判断其是否为回文数 输出： x = -321 n = 21

// let x = {
//     number: -321,
//     palindrome: false,
// };
// let y = {
//     number: 21,
//     palindrome: false,
// };
// let n = {
//     number: 212,
//     palindrome: true,
// };

// function test3(num: number): { number: number; palindrome: boolean } {
//   // 保留正负号
//   const flag = num > 0;
//   // 转化正数 => 转化字符串 => 转化数组 => 翻转 => 字符串
//   const result = +Math.abs(num).toString().split("").reverse().join("");
//     // 获取转化结果
//   const s = flag ? result : -result;
//   return { number: s, palindrome: s === num };
// }

// const s11 = test3(-110011);
// const s2 = test3(112211);
// const s3 = test3(-123321);

// console.log(s11);
// console.log(s2);
// console.log(s3);
